package innerclasses;

public class Sequence {
	private Object[] items;
	private int next = 0;
	public  Sequence(int size) {
		
		items = new Object[size];
		
	}
	
	public void add(Object x) {
		if(next <items.length) {
			items[next++]=x;
		}
	}
	private class SequenceSelector implements Selector{
		private int i=0;
		@Override
		public boolean end() {
			return i ==items.length;
		}
		@Override
		public Object current() {
			return items[i];
		}
		@Override
		public void next() {
			if(i<items.length) {
				i++;
			}
		}
		
		
	}
	public Selector selector() {
		return new SequenceSelector();
	}
	
	public static void main(String[] args) {
		Sequence sequence = new Sequence(10);
		for(int i =0;i<10;i++) {
			sequence.add(Integer.toString(i));
			
		}
		Selector selector = sequence.selector();
		while(!selector.end()) {
			System.out.print(selector.current()+",");
			selector.next();
		}
	}
	
//	所以内部类自动拥有对其外部类所有成员的访问权
//	当某个外部类的对象创建了一个内部类对象时，此内部类对象必定会秘密的捕获一个指向那个外部类对象的引用，然而在你访问此外部类的成员时候，就是那个引用来选择外部类的成员
//	幸运的是，编译器会帮您处理所有细节就，但是你现在可看到，内部类的对象只能与在其外部类的对象相关情况下才能被创建，构建一个内部类对象时候，需要指向外部类对象的引用，如不，编译器就会报错。绝大多数这都不需要程序员操心

}
